package com.miniapp.context;

import com.miniapp.entity.User;

/**
 * 用户上下文工具类
 * 使用ThreadLocal存储当前线程的登录用户信息
 *
 * @author yourName
 * @date 2025-09-03
 */
public class UserContext {

    /**
     * ThreadLocal存储用户信息，每个线程独立存储
     */
    private static final ThreadLocal<User> USER_THREAD_LOCAL = new ThreadLocal<>();

    /**
     * 设置当前线程的用户信息
     *
     * @param user 登录用户信息
     */
    public static void setUser(User user) {
        USER_THREAD_LOCAL.set(user);
    }

    /**
     * 获取当前线程的用户信息
     *
     * @return 登录用户信息，未登录则返回null
     */
    public static User getUser() {
        return USER_THREAD_LOCAL.get();
    }

    /**
     * 获取当前登录用户的ID
     *
     * @return 用户ID，未登录则返回null
     */
    public static Long getUserId() {
        User user = getUser();
        return user != null ? user.getId() : null;
    }

    /**
     * 清除当前线程的用户信息
     * 必须在请求结束时调用，避免内存泄漏
     */
    public static void clear() {
        USER_THREAD_LOCAL.remove();
    }
}

